package lezione8;

//: c06:PlaceSetting.java
// Combining composition & inheritance.
// From 'Thinking in Java, 3rd ed.' (c) Bruce Eckel 2002
// www.BruceEckel.com. See copyright notice in CopyRight.txt.


class Plate {
  Plate(int i) {
    System.out.println("Plate constructor");
  }
}

class DinnerPlate extends Plate {
  DinnerPlate(int i) {
    super(i);
    System.out.println("DinnerPlate constructor");
  }
}

class Utensil {
  Utensil(int i) {
    System.out.println("Utensil constructor");
  }
}

class Spoon extends Utensil {
  Spoon(int i) {
    super(i);
    System.out.println("Spoon constructor");
  }
}

class Fork extends Utensil {
  Fork(int i) {
    super(i);
    System.out.println("Fork constructor");
  }
}

class Knife extends Utensil {
  Knife(int i) {
    super(i);
    System.out.println("Knife constructor");
  }
}

// A cultural way of doing something:
class Custom {
   Custom(int i) {
    System.out.println("Custom constructor");
  }
}

public class PlaceSetting extends Custom {
 
  private Spoon sp;
  private Fork frk;
  private Knife kn;
  private DinnerPlate pl;
   
  public PlaceSetting(int i) {
    super(i + 1);
    sp = new Spoon(i + 2);      //Il compilatore non controlla se gli oggetti membro sono
    frk = new Fork(i + 3);		//stati inizializzati (questi statement potrebbero essere tolti senza errore)
    kn = new Knife(i + 4);		//mentre obbliga a inizializzare le classi  base e chiede di farlo 
    pl = new DinnerPlate(i + 5);//proprio all'inizio del costruttore di ogni classe (es. super(i+1) in PlaceSetting(int i))
    System.out.println("PlaceSetting constructor");
  }
  public static void main(String[] args) {
    PlaceSetting x = new PlaceSetting(9);
     
  }
} ///:~
